import request from '../utils/request';
import type {
  GoodsItem,
  GoodsListParams,
  GoodsListResponse,
  GoodsDetailResponse
} from './types';

/**
 * 商品相关接口
 */
export default {
  /**
   * 获取商品列表
   * @param params 查询参数
   */
  getGoodsList(params: GoodsListParams) {
    return request.get<GoodsListResponse>('/api/goods/list', params);
  },

  /**
   * 获取商品详情
   * @param id 商品ID
   */
  getGoodsDetail(id: string | number) {
    return request.get<GoodsDetailResponse>(`/api/goods/${id}`);
  },

  /**
   * 获取商品分类列表
   */
  getCategoryList() {
    return request.get('/api/goods/category/list');
  },

  /**
   * 获取商品分类详情
   * @param id 分类ID
   */
  getCategoryDetail(id: string | number) {
    return request.get(`/api/goods/category/${id}`);
  },

  /**
   * 获取商品评价列表
   * @param goodsId 商品ID
   * @param params 查询参数
   */
  getCommentList(goodsId: string | number, params?: {
    page?: number;
    pageSize?: number;
    rating?: number;
    hasImage?: boolean;
  }) {
    return request.get(`/api/goods/${goodsId}/comments`, params);
  },

  /**
   * 获取热门商品
   * @param limit 获取数量
   */
  getHotGoods(limit = 10) {
    return request.get('/api/goods/hot', { limit });
  },

  /**
   * 获取推荐商品
   * @param limit 获取数量
   */
  getRecommendGoods(limit = 10) {
    return request.get('/api/goods/recommend', { limit });
  },

  /**
   * 获取新品上市
   * @param limit 获取数量
   */
  getNewGoods(limit = 10) {
    return request.get('/api/goods/new', { limit });
  },

  /**
   * 搜索商品
   * @param keyword 关键词
   * @param params 查询参数
   */
  searchGoods(keyword: string, params?: {
    page?: number;
    pageSize?: number;
    categoryId?: string | number;
    sortBy?: 'price' | 'sales' | 'createTime';
    sortOrder?: 'asc' | 'desc';
  }) {
    return request.get('/api/goods/search', {
      keyword,
      ...params
    });
  },

  /**
   * 获取商品规格
   * @param goodsId 商品ID
   */
  getGoodsSpecs(goodsId: string | number) {
    return request.get(`/api/goods/${goodsId}/specs`);
  },

  /**
   * 获取商品库存
   * @param goodsId 商品ID
   * @param specIds 规格ID数组
   */
  getGoodsStock(goodsId: string | number, specIds: (string | number)[]) {
    return request.get(`/api/goods/${goodsId}/stock`, {
      specIds: specIds.join(',')
    });
  },

  /**
   * 收藏商品
   * @param goodsId 商品ID
   */
  favoriteGoods(goodsId: string | number) {
    return request.post(`/api/goods/${goodsId}/favorite`);
  },

  /**
   * 取消收藏商品
   * @param goodsId 商品ID
   */
  unfavoriteGoods(goodsId: string | number) {
    return request.delete(`/api/goods/${goodsId}/favorite`);
  },

  /**
   * 获取收藏的商品列表
   * @param params 查询参数
   */
  getFavoriteList(params?: {
    page?: number;
    pageSize?: number;
  }) {
    return request.get('/api/goods/favorite/list', params);
  },
};